iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0

在昨天介紹的內文中,有提及nodeSelector,那今天就來介紹該如何指派 Pod 要放在哪一個 Node 上吧!

一般而言,Kubernetes 會自動找到適合每一個 Pod 運行的 worker node,在少數情形之下,當使用者希望能介入並指定特定 Pod 所放置的 Node,這也才有以下的需求。

先來分析一下使用情境:
想像一下,如果分別有三台 Servers 規格不同,這邊先以大中小來作為區分,而其中 Pod A 上所要執行的 workloads 需要特定硬體來進行運算與執行,因此它被規定必須要放在 Node[large] 上才能正常運作,此時該如何確保,Pod A 一定會被分派到指定 Node 上呢,而以下解法也就是所謂的 Pod 調度。

https://ithelp.ithome.com.tw/upload/images/20230925/20163282b3oqSu2RSH.jpg

Kubernetes 具有以下幾種方法來達成上述要求:

  • nodeSelector: 直接在 Pod 定義規格上,指定放置到具有特殊 label 的 Node 上

  • Affinity/ Anti-affinity: 它還細分為兩種,分別為 Node Affinity、inter-pod affinity/ anti-affinity。

    • 匹配方式更多樣,可以更有彈性地控制邏輯
    • 可以設定 preference ,表示不一定需要完全符合條件,只是傾向於那樣的條件。
  • nodeName: 比起上述兩種方式,更直接粗暴,直接指定 nodeName,當此 field 不為空時,scheduler 會直接略過 Pod,並且指定 Node 上的 kubelet 會直接啟動該 Pod。

  • Taints and Tolerations: 透過 taints(汙點)和 toleration(容忍) 來讓 Pod 盡量落在期望的 node 上運行。
    可以想像為,taints 像是噴一種藥噴在人身上 (ex.防蚊液),而 toleration 則是指該昆蟲是否有容忍這味道的能力,如果有,那麼它可以落在人身上(當然也可以不要,如果牠並非以人類為利的話); 相反的,如果牠不具有 toleration,那他絕不可能有能力或機會落在人類身上。

今天先這樣囉


Don't be dicouraged; it's often the last key in the bunch that opens the lock.
共勉之


上一篇
[Day 9]. Daemonset
下一篇
[Day 11.] ConfigMap
系列文
Way to Golang & Kubernetes 11
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言